package com.tbit.main.service;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * redis service
 *
 * @author Leon
 * 2019年1月23日 下午3:54:06
 */
public interface RedisService {
    /**
     * 添加
     *
     * @param key
     * @param value
     */
    void add(String key, String value);

    void add(String key, String value, long timeout, TimeUnit unit);

    /**
     * 设置有效期
     *
     * @param key
     * @param value
     * @param seconds
     */
    void add(String key, String value, Integer seconds);

    /**
     * 获取
     *
     * @param key
     * @return
     */
    String get(String key);

    /**
     * 获取二级哈希
     *
     * @param hashId
     * @param key
     * @return
     */
    public String get(String hashId, String key);

    /**
     * 网关redis
     *
     * @param hashId
     * @param key
     * @return
     */
    public String getGetWay(String hashId, String key);

    /**
     * 获取
     *
     * @param key
     * @return
     */
    String get1(String key);

    /**
     * 获取一级哈希
     *
     * @param hashId
     * @return
     */
    public Map<String, String> getAll(String hashId);

    /**
     * 根据哈希id批量获取
     *
     * @param hashIds
     * @return
     */
    public Map<String, Map<String, String>> getByHashIds(List<String> hashIds);

    /**
     * 删除
     *
     * @param key
     */
    public void del(String key);

    /**
     * 删除二级哈希
     *
     * @param hashId
     * @param key
     */
    public void del(String hashId, String key);

    /**
     * 设置二级哈希
     *
     * @param hashId
     * @param key
     * @param value
     */
    public void set(String hashId, String key, String value);

    /**
     * 添加到列表里面
     *
     * @param key
     * @param value
     */
    public void andToList(String key, String value);

    /**
     * 添加列表
     *
     * @param key
     * @param value
     */
    public void andList(String key, List<String> value);

    /**
     * 从列表删除
     *
     * @param key
     * @param value
     */
    public void delToList(String key, String value);

    /**
     * 获取列表
     *
     * @param key
     * @return
     */
    List<String> getList(String key);

    /**
     * 判断key是否存在
     *
     * @param key
     * @return
     */
    Boolean exists(String key);

    /**
     * 是否被锁
     *
     * @param key    键
     * @param second 被锁的秒数
     * @return true - 已加锁  false-未加锁
     */
    @Deprecated
    boolean locked(String key, Integer second);

    /**
     * setnx 锁
     * @param key 键
     * @param value 值
     * @param timeout 锁的超时时间
     * @return 是否锁成功
     */
    boolean setNx(String key, String value, long timeout);

    /**
     * 预统计自增
     */
    void incr(String hashId);

    /**
     * 批量删除模糊keys
     *
     * @param keys
     */
    Set<String> getLikeKeys(String keys);

    void delLikeKeys(Set<String> keyLike);

    boolean hmset(String key, Map<String, Object> map);

    boolean hmset(String key, Map<String, Object> map, long time);

    boolean expire(String key, long time);

    Map<Object, Object> hmget(String key);

    boolean hasKey(String key);
}
